package com.djx.entity.access;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;


@Entity
@Data
@Table(name = "t_user")
@NoArgsConstructor
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    /**
     * id
     */
    @Column(name = "id")
    private String id;

    /**
     * 登录用户名
     */
    @Column(name = "username")
    private String username;

    /**
     * 登录密码
     */
    @Column(name = "password")
    private String password;

    /**
     * 姓名
     */
    @Column(name = "nick_name")
    private String nickName;

    /** (这个系统中只有两种身份 一种是admin 另一种是超级管理员)
     * 用户身份 : (admin 超级管理员)   (user:根据设计不同，有不同的权限)
     */
    @Column(name = "user_level")
    private String userLevel;

    /**
     * 1 是老师 2 是学生  (公用user表)  还会有student 和teacher表
     */
    @Column(name = "user_type")
    private String userType;

    /**
     * 学号
     */
    @Column(name = "student_id")
    private String studentId;

    /**
     * 是否禁用该账号 0正常 1 禁用
     */
    @Column(name = "user_status")
    private String userStatus;

    /**
     * 电话号码
     */
    @Column(name = "telephone")
    private String telephone;

    /**
     * 邮箱
     */
    @Column(name = "email")
    private String email;

    /**
     * 性别
     */
    @Column(name = "sex")
    private String sex;

    /**
     * 省
     */
    @Column(name = "province")
    private String province;

    /**
     * 市
     */
    @Column(name = "city")
    private String city;

    /**
     * 区县
     */
    @Column(name = "area")
    private String area;

    /**
     * 详细住址
     */
    @Column(name = "detailed_address")
    private String detailedAddress;

    /**
     * 最后操作时间
     */
    @Column(name = "modify_time")
    private Date modifyTime;

    /**
     * 是否删除 0 正常 1 删除
     */
    @Column(name = "is_delete")
    private Integer isDelete;

//    //使用transient关键字修饰的属性，在保存对象时，该属性并不会被保存。
//    private transient String roleIds;


    /**
     * 用户与角色  多对多
     */
    @ManyToMany
    @JoinTable(name = "t_user_role", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})
    private Set<Role> roles = new HashSet<>(0);


}
